jak se dedi Eventy

Otázka od: Jan Harman

25. 5. 2004 12:45

Zdravim vsechny,

Mam
FR1 = class (TFrame) a na nem tlacitko u ktereho mam (mimo jine) definovane
OnClick.
Od tohoto frame mam odvozenou dalsi tridu
FR2 = class (FR1), na ktere se toto tlacitko jiz neobsluhuje.
Vytvorim instanci FR2 a tlacitko nereaguje.
???
Dekuji.
Honza


Odpovedá: Ondrej Kelle

25. 5. 2004 13:29

> Mam FR1 = class(TFrame) a na nem tlacitko u ktereho mam
> (mimo jine) definovane OnClick.
> Od tohoto frame mam odvozenou dalsi tridu FR2 = class(FR1),
> na ktere se toto tlacitko jiz neobsluhuje.
> Vytvorim instanci FR2 a tlacitko nereaguje.
> ???

Pozri si .dfm toho FR2. Zrejme je tam deklarovany ako 'object' (nespravne) a
nie 'inherited' (spravne).
Delphi tam dosadi 'inherited' len v tom pripade, ak pouzijes tzv.
"form
inheritance", t.j. novy frame vytvoris cez File\New\Other... a z tabu s
navom <project_name> si zvolis polozku <ancestor_name> s volbou "Inherit"
(na tomto tabe inu moznost nemas, "Copy" a "Use" su nepristupne).

Ak to robis rucne pre uz hotovy frame, ktory si si predtym vytvoril
(napriklad ako priameho potomka TFrame), nestaci prepisat deklaraciu triedy
v zdrojaku, je tiez potrebne prepisat oznacenie 'object' v .dfm na
'inherited'.

To tiez plati pre vsetky komponenty zdedene od predka: mali by byt oznacene
klucovym slovom 'inherited'... ak su tam vobec uvedene.

V .dfm potomka by mali byt uvedene len 'nove' komponenty (tie, ktore vytvara
sam potomok), v pripade zdedenych komponentov len tie, u ktorych niektora
vlastnost ma inu hodnotu ako v predkovi. A v takych pripadoch su uvedene len
tie vlastnosti, ktorych hodnoty sa od potomka lisia. Skratka povedane, do
.dfm streamu potomka sa uklada len 'delta', t.j. rozdiely oproti .dfm
streamu predka.

HTH
TOndrej